#include <bits/stdc++.h>
#define MaxSize 100
using namespace std;

// // 数组静态分配
// typedef struct{
//     int data[MaxSize];
//     int length = 0;
// }SqList;

// 动态分配
typedef struct{
    int *data; // 动态地址
    int length = 0;
}SqList1;

// 插入数据
bool ListInsert(SqList1 &L, int i, int e){
    if(i < 1 || i > L.length + 1) return false;
    if(L.length >= MaxSize) return false;
    for(int j = L.length; j >= i; j--){
        L.data[j] = L.data[j - 1];
    }
    L.data[i - 1] = e;
    L.length++;
    return true;
}

// 按下标删除
bool ListDelByIndex(SqList1 &L, int i, int &e){
    if(i < 1 || i > L.length) return false;
    if(L.length <= 0) return false;
    e = L.data[i - 1];
    for(int j = i; j < L.length; j++){
        L.data[j - 1] = L.data[j];
    }
    L.length--;
    return true;
}

// 按值查找删除
bool ListDelByValue(SqList1 &L, int v){
    int flag = 0;
    int f[] = {0};
    for(int i = 0; i < L.length; i++){
        if(L.data[i] == v) f[flag++] = i;
    }
    if(flag){
        for(int i = flag - 1; i >= 0; i--){
            for(int j = f[i]; j > L.length; j++){
                L.data[j - 1] = L.data[j];
            }
            L.length--;
        }
        return true;
    }else return false;
}

// 查找元素
int LocateElem(SqList1 L, int e){
    for(int i = 0; i < L.length; i++) 
        if(L.data[i] == e) return i + 1; 
    return 0;   
}

int main(){
    SqList1 L;
    L.data = new int(MaxSize);
    ListInsert(L, 1, 2);
    ListInsert(L, 2, 3);
    ListInsert(L, 3, 4);
    ListInsert(L, 4, 4);
    int x;  // 记录删除的是那个value
    ListDelByIndex(L, 3, x);
    ListDelByValue(L, 4);
    for(int i = 0; i < L.length; i++)  cout << L.data[i] << endl;
    return 0;
}